// 引入http模块
import http from 'wechat-http'

// 配置请求的根路径
http.baseURL = 'https://live-api.itheima.net'

// 配置请求拦截器
http.intercept.request = (params) => {
  // 1. 配置请求头
  // 1.1 获取token
  const token = getApp().token
  // 1.2 创建一个新对象, 往空对象中加token
  const defualtHeader = {}
  if (token) defualtHeader.Authorization = token
  // 1.3 把新对象合并到请求头的header中
  params.header = Object.assign({}, params.header, defualtHeader)
  return params
}

// 配置响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  // console.log(config)
  // 1. 判断http状态码为401(延长token和refreshToken)
  if (statusCode === 401) {
    // 2. 判断是否是refreshToken请求
    if (config.url.includes('/refreshToken')) {
      // token失效, refreshToken也失效, 此时, 应该去登录页
      const stack = getCurrentPages()
      const currentPage = stack[stack.length - 1]
      const redirectURL = currentPage.route
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }

    // 1.1 获取全局的app实例
    const app = getApp()
    // 如果本地没有 refresh_token 没有必要刷新 token
    // 判断: 刷新token在一个大的前提-->必须有refreshToken
    if (!app.refreshToken) return
    // 1.2 调用refreshToken请求
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 注意: 此处不是token而是refreshToken
        Authorization: app.refreshToken,
      },
    })
    if (res.data) {
      app.saveToken(res.data.token, res.data.refreshToken)
      // 无感请求
      return http(
        Object.assign(config, {
          header: {
            Authorization: app.token,
          },
        })
      )
    }
  }
  return data
}

// 挂载到全局对象
wx.http = http

// 模块化导出
export default http
